//////////////////////////////////////////////////////////////////////
//
// NO_ArchiveTxt.cpp interface for the NO_ArchiveTxt class.
//
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
#define NO_TAL_EXPORT

//////////////////////////////////////////////////////////////////////////
#include "NO_Externs.h"
#include "NO_ArchiveTxt.h"

//////////////////////////////////////////////////////////////////////
// con/destruction
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
NO_ArchiveTxt::NO_ArchiveTxt(void){}
NO_ArchiveTxt::NO_ArchiveTxt(const NO_ArchiveTxt& rhs){}
NO_ArchiveTxt::~NO_ArchiveTxt(){}

//////////////////////////////////////////////////////////////////////////
// use
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
NO_OArchive& NO_ArchiveTxt::operator<<(NO_Object& value)	{return NO_OArchive::operator <<(value);}
NO_IArchive& NO_ArchiveTxt::operator>>(NO_Object& value)	{return NO_IArchive::operator >>(value);}

//////////////////////////////////////////////////////////////////////////
// write
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
NO_OArchive& NO_ArchiveTxt::write(NO_Boolean& value)	{stream<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveTxt::write(NO_Int& value)		{stream<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveTxt::write(NO_Int8& value)	{stream<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveTxt::write(NO_UInt& value)	{stream<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveTxt::write(NO_UInt8& value)	{stream<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveTxt::write(NO_SInt8& value)	{stream<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveTxt::write(NO_UInt16& value)	{stream<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveTxt::write(NO_SInt16& value)	{stream<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveTxt::write(NO_UInt32& value)	{stream<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveTxt::write(NO_SInt32& value)	{stream<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveTxt::write(NO_UInt64& value)	{stream<<(NO_UInt32)value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveTxt::write(NO_SInt64& value)	{stream<<(NO_UInt32)value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveTxt::write(NO_Float32& value)	{stream<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveTxt::write(NO_Float64& value)	{stream<<value<<" "<<std::endl; return *this;}

//////////////////////////////////////////////////////////////////////
NO_OArchive& NO_ArchiveTxt::write(std::string& value)	 
{
	NO_UInt32 size = value.size();	
	stream<<size<<value.c_str()<<" "<<std::endl; 
	return *this;
}

//////////////////////////////////////////////////////////////////////
NO_OArchive& NO_ArchiveTxt::write(const NO_Int8* value)  
{
	NO_UInt32 size = strlen(value);	
	stream<<size<<value<<" "<<std::endl; 
	return *this;
}

//////////////////////////////////////////////////////////////////////
NO_OArchive& NO_ArchiveTxt::write(NO_Int8* value)		 
{
	NO_UInt32 size = strlen(value);	
	stream<<size<<value<<" "<<std::endl; 
	return *this;
}

//////////////////////////////////////////////////////////////////////
NO_OArchive& NO_ArchiveTxt::writeBegin(NO_Object& object)
{
	const NO_Type& type	= object.getType();
	stream<<type.getID()<<" "<<object.getID()<<" "<<object.getNum()<<std::endl;
	return *this;
}

//////////////////////////////////////////////////////////////////////
NO_OArchive& NO_ArchiveTxt::writeEnd(NO_Object& object)
{
	stream<<std::endl;
	return *this;
}

//////////////////////////////////////////////////////////////////////////
// read
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
NO_IArchive& NO_ArchiveTxt::read(NO_Boolean& value)	{stream>>value; return *this;}
NO_IArchive& NO_ArchiveTxt::read(NO_Int& value)		{stream>>value; return *this;}
NO_IArchive& NO_ArchiveTxt::read(NO_Int8& value)		{stream>>value; return *this;}
NO_IArchive& NO_ArchiveTxt::read(NO_UInt& value)		{stream>>value; return *this;}
NO_IArchive& NO_ArchiveTxt::read(NO_UInt8& value)	{stream>>value; return *this;}
NO_IArchive& NO_ArchiveTxt::read(NO_SInt8& value)	{stream>>value; return *this;}
NO_IArchive& NO_ArchiveTxt::read(NO_UInt16& value)	{stream>>value; return *this;}
NO_IArchive& NO_ArchiveTxt::read(NO_SInt16& value)	{stream>>value; return *this;}
NO_IArchive& NO_ArchiveTxt::read(NO_UInt32& value)	{stream>>value; return *this;}
NO_IArchive& NO_ArchiveTxt::read(NO_SInt32& value)	{stream>>value; return *this;}
NO_IArchive& NO_ArchiveTxt::read(NO_UInt64& value)	{stream>>(NO_UInt32&)value; return *this;}
NO_IArchive& NO_ArchiveTxt::read(NO_SInt64& value)	{stream>>(NO_UInt32&)value; return *this;}
NO_IArchive& NO_ArchiveTxt::read(NO_Float32& value)	{stream>>value; return *this;}
NO_IArchive& NO_ArchiveTxt::read(NO_Float64& value)	{stream>>value; return *this;}

//////////////////////////////////////////////////////////////////////
NO_IArchive& NO_ArchiveTxt::read(std::string& value)	
{
	NO_UInt32 size = 0;
	stream>>size;
	if (size==0){return *this;}

	char* tempString = new char[size+1];
	noReadBin(tempString,size,stream);
	tempString[size]=0;
	value = tempString;
	delete [size+1] tempString;

	return *this;
}

//////////////////////////////////////////////////////////////////////
NO_IArchive& NO_ArchiveTxt::read(const NO_Int8* value)
{
	return *this;
}

//////////////////////////////////////////////////////////////////////
NO_IArchive& NO_ArchiveTxt::read(NO_Int8*& value)
{
	NO_UInt32 size = 0;
	stream>>size;
	if(size==0)	{return *this;}
	if(value)	{delete value;}
	NO_Int8* tempString = new NO_Int8[size+1];
	tempString[size] = 0;
	noReadBin(tempString,size,stream);
	value = tempString;
	return *this;
}

//////////////////////////////////////////////////////////////////////////
NO_IArchive& NO_ArchiveTxt::readBegin(void)
{
	NO_UInt32 typeID;
	NO_UInt32 ptrID;
	NO_UInt32 num;
	stream>>typeID>>ptrID>>num;
	setLastRead(typeID,ptrID,num);
	return *this;
}

//////////////////////////////////////////////////////////////////////////
NO_IArchive& NO_ArchiveTxt::readEnd(void)
{
	return *this;
}

//////////////////////////////////////////////////////////////////////
// operators
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
NO_ArchiveTxt& NO_ArchiveTxt::operator=(const NO_ArchiveTxt& rhs){return (*this);}

